#include "debug.h"
#include "../DDIC/AllDDIC.h"
#include "usbd_cdc.h"

u8 RM692CX_Gamma_R[66]=
{
		0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,
	  0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,
	  0x2d,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3d,0x3f,0x40,0x41,0x42,0x43,0x44,0x45
};
u8 RM692CX_Gamma_G[66]=
{
		0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x58,0x59,0x5a,0x5b,0x5c,0x5d,
		0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,
		0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
		0x88,0x89,0x8a
};
u8 RM692CX_Gamma_B[66]=
{
	 0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,0xa0,0xa2,
	 0xa3,0xa4,0xa5,0xa6,0xa7,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,
	 0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,
	 0xce,0xcf,0xd0
};

u8 RM692CX_Gamma_Points[33] =
{
	 0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,
	 0x51,0x52,0x53,0x54,0x55,0x56,0x58,0x59,
	 0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
	 0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69
};

void RM692Cx_Write_Register(USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
    //SSD2828_W_Reg(SigMode,channel,0xB7,(LP_B7_Data&0xFBFF)|0x0400); 
		SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0410)&0XFFFD);		
    delay_ms(5);	
		SSD2828_W_Array(SigMode,channel,buffer,2);
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
    delay_ms(5);
    buffer[4] = Uart_Error_None;
    STM2PC(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 写寄存器状态  ：ok
}

void RM692Cx_Read_Register(USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
//    u16 tmp;
//	u8 buffer1[3];
    SSD2828_W_Reg(SigMode,channel,0xB7,LP_B7_Data|0x0080);                               
    
	delay_ms(5);
	Mipi_Read(pdev,SigMode,channel,buffer[3],buffer[2]-1,Buffer_ReadCode);
	memcpy(buffer+4,Buffer_ReadCode,buffer[2]-1);
    
	SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
	buffer[1]=2;  //0x02 Read标志位，串口返回数据处理部分
    STM2PC(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 读取的 寄存器数据  ：ok 
}


void RM692Cx_Write_Gamma(USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
    u8 buffer1[5];
    SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFfd);
		delay_ms(2);
			
//	  if((buffer[3]&0x80) == 0x80) //udc gamma
//		{
//				buffer1[0] = 0x02;	
//				buffer1[1] = 0xFE;
//				buffer1[2] = 0xf2;               
//				SSD2828_W_Array(SigMode,channel,buffer1,0);		
//				buffer1[1] = 0x4c;  
//				buffer1[2] = 0x5f;                // 强切gamma58
//				SSD2828_W_Array(SigMode,channel,buffer1,0);					
//		}
//		else  //normal gamma
//		{
//				buffer1[0] = 0x02;	
//				buffer1[1] = 0xFE;
//				buffer1[2] = 0x70;                // 强切gamma1
//				SSD2828_W_Array(SigMode,channel,buffer1,0);
//				buffer1[1] = 0x71;
//				buffer1[2] = 0x00;                // 强切gamma1
//				SSD2828_W_Array(SigMode,channel,buffer1,0);
//				buffer1[1] = 0x72;
//				buffer1[2] = 0x31;                // 强切gamma1
//				SSD2828_W_Array(SigMode,channel,buffer1,0);	
//		}
//----------------------------------------------------------	
		buffer1[0] = 0x02;
    if((buffer[3]&0x0f) == 0x00)
    {
        buffer1[1] = 0xFE;
        buffer1[2] = 0x50;                // GAMMA1  page1
        SSD2828_W_Array(SigMode,channel,buffer1,0);
    }
    else if((buffer[3]&0x0f) == 0x01)
    {
        buffer1[1] = 0xFE;
        buffer1[2] = 0x52;                // GAMMA2  page7
        SSD2828_W_Array(SigMode,channel,buffer1,0);
    }   
    else if((buffer[3]&0x0f) == 0x02)
    {
        buffer1[1] = 0xFE;
        buffer1[2] = 0x54;                // GAMMA3  page8
        SSD2828_W_Array(SigMode,channel,buffer1,0);
    }
		 else if((buffer[3]&0x0f) == 0x03)
    {
        buffer1[1] = 0xFE;
        buffer1[2] = 0x56;                // GAMMA3  page8
        SSD2828_W_Array(SigMode,channel,buffer1,0);
    }
		 else if((buffer[3]&0x0f) == 0x04)
    {
        buffer1[1] = 0xFE;
        buffer1[2] = 0x58;                // GAMMAX UDC
        SSD2828_W_Array(SigMode,channel,buffer1,0);
    }		
    for( i = 0;i<buffer[2]-1;i++) 
    {	 
        if((buffer[3]&0xf0)==0x00)	
            SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|RM692CX_Gamma_R[i]);  
        else if((buffer[3]&0xf0)==0x10)
            SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|RM692CX_Gamma_G[i]); 
        else if((buffer[3]&0xf0)==0x20)
            SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|RM692CX_Gamma_B[i]); 																		
        delay_ms(2);
    }
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
    buffer[4] = Uart_Error_None;
    STM2PC(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 写Gamma状态  ：ok  
}

void RM692Cx_Read_Gamma(USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
    u8 buffer1[3];
		SSD2828_W_Reg(SigMode,channel,0xB7,LP_B7_Data);
		delay_ms(10);
	
		buffer1[0] = 0x02;	
	 buffer1[1] = 0xFE;
	 buffer1[2] = 0x00;      
    if(buffer[4] == 0x01)      //Gamma1
    {			
        buffer1[1] = 0xFE;
			  buffer1[2] = 0x50;      // GAMMA1  page1
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
    }
    else if(buffer[4] == 0x02) //Gamma2
    {
        buffer1[1] = 0xFE;       
        buffer1[2] = 0x52;      // GAMMA2  page7
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
    }
    else if(buffer[4] == 0x03) //Gamma3
    {
        buffer1[1] = 0xFE;        
        buffer1[2] = 0x54;      // GAMMA3  page8
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
    }
		else if (buffer[4] ==0x04)
		{
        buffer1[1] = 0xFE;        
        buffer1[2] = 0x56;      // GAMMA3  page8
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
		}
		else if (buffer[4] ==0x05)
		{
        buffer1[1] = 0xFE;        
        buffer1[2] = 0x58;      // GAMMAX UDC
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
		}			
		delay_ms(5);		
    SSD2828_W_Reg(SigMode,channel,0xB7,LP_B7_Data|0x0080);
		delay_ms(5);				
		SSD2828_W_Reg(SigMode,channel,0xC1,0x0002); 
    SSD2828_W_Reg(SigMode,channel,0xBC,0x0001);			
    for( i = 0;i<buffer[2]-1;i++)			 	
    {  	                              
        buffer1[0] = 0x01;
        buffer1[1] = (buffer[3]==0x00) ? RM692CX_Gamma_R[i] : ((buffer[3]==0x01) ? RM692CX_Gamma_G[i] : RM692CX_Gamma_B[i]);
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
				delay_ms(6);
        buffer[4+i]=SSD2828_R_Reg(SigMode,channel,0xFF);        
    }
    delay_ms(5);
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
    STM2PC(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 读取的 Gamma数据  ：ok  
}

void RM692CX_AutoGamma_UDC(USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
	  u8 buffer1[3];
    if(SigMode == Video_Mode)
    {
        SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFFD);
    }
    else if(SigMode == CMD_Mode)	
		{
		    SSD2828_W_Reg(SigMode,channel,0xB7,LP_B7_Data);
		}
		delay_ms(5);
	
		
		buffer1[0] = 0x02;	
		buffer1[1] = 0xFE;
		buffer1[2] = 0xF2;                // 强切gamma1
		SSD2828_W_Array(SigMode,channel,buffer1,0);
		buffer1[1] = 0x4C;
		buffer1[2] = 0x5F;                // 强切gamma1
		SSD2828_W_Array(SigMode,channel,buffer1,0);
		delay_ms(5);
		
		buffer1[0] = 0x02;	
		buffer1[1] = 0xFE;
		buffer1[2] = 0x58;                
		SSD2828_W_Array(SigMode,channel,buffer1,0);		
//    if((buffer[3]&0x03) == 0x00)
//    {
//        buffer1[1] = 0xFE;
//        buffer1[2] = 0x50;                // GAMMA1  page1
//        SSD2828_W_Array(SigMode,channel,buffer1,0);
//    }
//    else if((buffer[3]&0x03) == 0x01)
//    {
//        buffer1[1] = 0xFE;
//        buffer1[2] = 0x52;                // GAMMA2  page7
//        SSD2828_W_Array(SigMode,channel,buffer1,0);
//    }   
//    else if((buffer[3]&0x03) == 0x02)
//    {
//        buffer1[1] = 0xFE;
//        buffer1[2] = 0x54;                // GAMMA3  page8
//        SSD2828_W_Array(SigMode,channel,buffer1,0);
//    }
//		 else if((buffer[3]&0x03) == 0x03)
//    {
//        buffer1[1] = 0xFE;
//        buffer1[2] = 0x56;                // GAMMA3  page8
//        SSD2828_W_Array(SigMode,channel,buffer1,0);
//    }
		
		SSD2828_W_Reg(SigMode,channel,0xBC,0x02);
    for( i = 0;i<buffer[2];i++) 
    {	 
			SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|buffer[i+3]);  
			i++;
			delay_ms(2);
    }				
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
}

void RM692CX_AutoGamma(USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
	  u8 buffer1[3];
    if(SigMode == Video_Mode)
    {
        SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFFD);
    }
    else if(SigMode == CMD_Mode)	
		{
		    SSD2828_W_Reg(SigMode,channel,0xB7,LP_B7_Data);
		}
		delay_ms(5);
		
		buffer1[0] = 0x02;	
		buffer1[1] = 0xFE;
		buffer1[2] = 0x70;                // 强切gamma1
		SSD2828_W_Array(SigMode,channel,buffer1,0);
		buffer1[1] = 0x71;
		buffer1[2] = 0x00;                // 强切gamma1
		SSD2828_W_Array(SigMode,channel,buffer1,0);
		buffer1[1] = 0x72;
		buffer1[2] = 0x31;                // 强切gamma1
		SSD2828_W_Array(SigMode,channel,buffer1,0);		

		buffer1[0] = 0x02;	
		buffer1[1] = 0xFE;
		buffer1[2] = 0x50;                
		SSD2828_W_Array(SigMode,channel,buffer1,0);		
//    if((buffer[3]&0x03) == 0x00)
//    {
//        buffer1[1] = 0xFE;
//        buffer1[2] = 0x50;                // GAMMA1  page1
//        SSD2828_W_Array(SigMode,channel,buffer1,0);
//    }
//    else if((buffer[3]&0x03) == 0x01)
//    {
//        buffer1[1] = 0xFE;
//        buffer1[2] = 0x52;                // GAMMA2  page7
//        SSD2828_W_Array(SigMode,channel,buffer1,0);
//    }   
//    else if((buffer[3]&0x03) == 0x02)
//    {
//        buffer1[1] = 0xFE;
//        buffer1[2] = 0x54;                // GAMMA3  page8
//        SSD2828_W_Array(SigMode,channel,buffer1,0);
//    }
//		 else if((buffer[3]&0x03) == 0x03)
//    {
//        buffer1[1] = 0xFE;
//        buffer1[2] = 0x56;                // GAMMA3  page8
//        SSD2828_W_Array(SigMode,channel,buffer1,0);
//    }
		
		SSD2828_W_Reg(SigMode,channel,0xBC,0x02);
    for( i = 0;i<buffer[2];i++) 
    {	 
			SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|buffer[i+3]);  
			i++;
			delay_ms(2);
    }				
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
}

void RM692Cx_Gamma_Mapping(USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
		u8 buffer1[5];
		SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFfd);
		delay_ms(5);
		buffer1[0] = 0x02;
		buffer1[1] = 0xfe;
		buffer1[2] = 0x70;
		SSD2828_W_Array(SigMode,channel,buffer1,0);
	
		buffer1[1] = 0x48;
		buffer1[2] = buffer[3];
		SSD2828_W_Array(SigMode,channel,buffer1,0);		
	
		for( i = 1;i<buffer[2];i++) 
		{	 
			SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+3]<<8)|RM692CX_Gamma_Points[i]);   																	
			delay_ms(1);
		}
		SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
		buffer[4] = Uart_Error_None;
		STM2PC(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 写Gamma状态  ：ok  		

}



void RM692Cx_Gamma_OTP_Start(USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
		u8 buffer1[5];
		SSD2828_W_Reg(SigMode,channel,0xB7,LP_B7_Data);
		delay_ms(5);
	/*
		buffer1[0] = 0x02;
		buffer1[1] = 0xfe;
		buffer1[2] = 0xD0;
		SSD2828_W_Array(SigMode,channel,buffer1,0); 	
		R_E6=Read_Register(SigMode,channel,0xE6);
		R_E7=Read_Register(SigMode,channel,0xE7);	
		buffer1[0] = 0x02;
		buffer1[1] = 0xfe;
		buffer1[2] = 0x44;
		SSD2828_W_Array(SigMode,channel,buffer1,0); 		
		R_30=Read_Register(SigMode,channel,0x30);
		R_31=Read_Register(SigMode,channel,0x31);
		R_32=Read_Register(SigMode,channel,0x32);
		R_33=Read_Register(SigMode,channel,0x33);
		R_34=Read_Register(SigMode,channel,0x34);
		R_35=Read_Register(SigMode,channel,0x35);	
		R_36=Read_Register(SigMode,channel,0x36);
*/
		if(buffer[4]==6) //RCN
		{
			buffer1[0] = 0x02;
			buffer1[1] = 0xFE;
			buffer1[2] = 0xD0;
			SSD2828_W_Array(SigMode,channel,buffer1,0);  				
			buffer1[0] = 0x02;
			buffer1[1] = 0x99;
			buffer1[2] = 0x20;
			SSD2828_W_Array(SigMode,channel,buffer1,0);  	
//			buffer1[0] = 0x02;
//			buffer1[1] = 0xFE;
//			buffer1[2] = 0x40;
//			SSD2828_W_Array(SigMode,channel,buffer1,0);  		
//			buffer1[0] = 0x02;
//			buffer1[1] = 0x9A;
//			buffer1[2] = 0x00;
//			SSD2828_W_Array(SigMode,channel,buffer1,0);  								
		}

    buffer1[0] = 0x02;
    buffer1[1] = 0xFE;
    buffer1[2] = 0x00;
    SSD2828_W_Array(SigMode,channel,buffer1,0);  		

		buffer1[0] = 0x01;
		buffer1[1] = 0x28;
		SSD2828_W_Array(SigMode,channel,buffer1,0); 	
		delay_ms(50);
		buffer1[0] = 0x01;
		buffer1[1] = 0x10;
		SSD2828_W_Array(SigMode,channel,buffer1,0); 	
		delay_ms(50);	
//----------------------------		
    buffer1[0] = 0x02;
    buffer1[1] = 0xFE;
    buffer1[2] = 0x42;
    SSD2828_W_Array(SigMode,channel,buffer1,0);    
    buffer1[1] = 0x03;
    buffer1[2] = 0x10;
    SSD2828_W_Array(SigMode,channel,buffer1,0);   
    buffer1[1] = 0x04;
    buffer1[2] = 0x32;
    SSD2828_W_Array(SigMode,channel,buffer1,0); 
    buffer1[1] = 0x05;
    buffer1[2] = 0x10;
    SSD2828_W_Array(SigMode,channel,buffer1,0); 
    buffer1[1] = 0x06;
    buffer1[2] = 0x32;
    SSD2828_W_Array(SigMode,channel,buffer1,0); 
    buffer1[1] = 0x07;
    buffer1[2] = 0x10;
    SSD2828_W_Array(SigMode,channel,buffer1,0); 
    buffer1[1] = 0x08;
    buffer1[2] = 0x32;
    SSD2828_W_Array(SigMode,channel,buffer1,0); 
    buffer1[1] = 0x09;
    buffer1[2] = 0x10;
    SSD2828_W_Array(SigMode,channel,buffer1,0); 
    buffer1[1] = 0x0A;
    buffer1[2] = 0x32;
    SSD2828_W_Array(SigMode,channel,buffer1,0); 
    buffer1[1] = 0x0B;
    buffer1[2] = 0x10;
    SSD2828_W_Array(SigMode,channel,buffer1,0); 
    buffer1[1] = 0x0C;
    buffer1[2] = 0x32;
    SSD2828_W_Array(SigMode,channel,buffer1,0); 		
		
		
    buffer1[0] = 0x02;
    buffer1[1] = 0xFE;
    buffer1[2] = 0x40;
    SSD2828_W_Array(SigMode,channel,buffer1,0);     //Page0
    delay_ms(50);
//    buffer1[0] = 0x02;
//    buffer1[1] = 0xF2;
//    buffer1[2] = 0x01;
//    SSD2828_W_Array(SigMode,channel,buffer1,0);     //Page0			
//	  delay_ms(100);		
		
		//------page Enable-------------------

		if(buffer[4]==1)//GAM1-50H
		{
			buffer1[0] = 0x02;
			if(buffer[5]==1) //gamma1
			{
				buffer1[1] = 0xEE;
				buffer1[2] = 0x01;
			}
			else if(buffer[5]==5) //gamma5
			{
				buffer1[1] = 0xEE;
				buffer1[2] = 0x10;		
			}
			else if(buffer[5]==9) //gamma9
			{
				buffer1[1] = 0xED;
				buffer1[2] = 0x01;		
			}
			else if(buffer[5]==13) //gamma13
			{
				buffer1[1] = 0xED;
				buffer1[2] = 0x10;	
			}
			SSD2828_W_Array(SigMode,channel,buffer1,0);					
		}	
		else if(buffer[4]==2)//52
		{
			buffer1[0] = 0x02;
			if(buffer[5]==2) //gamma2
			{							
				buffer1[1] = 0xEE;
				buffer1[2] = 0x02;
			}
			else if(buffer[5]==6) //gamma6
			{
				buffer1[1] = 0xEE;
				buffer1[2] = 0x20;	
			}
			else if(buffer[5]==10)//gamma10
			{
				buffer1[1] = 0xED;
				buffer1[2] = 0x02;			
			}
			SSD2828_W_Array(SigMode,channel,buffer1,0);		
		}
		else if(buffer[4]==3)//GAM1-54H	
		{
			buffer1[0] = 0x02;
			if(buffer[5]==3) //gamma3
			{				
				buffer1[1] = 0xEE;
				buffer1[2] = 0x04;   
			}
			else if(buffer[5]==7) //gamma7
			{
				buffer1[1] = 0xEE;
				buffer1[2] = 0x40;   		
			}
			else if(buffer[5]==11) //gamma11
			{
				buffer1[1] = 0xED;
				buffer1[2] = 0x04;   		
			}
			SSD2828_W_Array(SigMode,channel,buffer1,0);		
		}
		else if(buffer[4]==4)//GAM1-56H	
		{
			buffer1[0] = 0x02;
			if(buffer[5]==4) //gamma4
			{	
				buffer1[1] = 0xEE;
				buffer1[2] = 0x08;
			}
			else if(buffer[5]==8) //gamma8
			{
				buffer1[1] = 0xEE;
				buffer1[2] = 0x80;		
			}
			else if(buffer[5]==12) //gamma12
			{
				buffer1[1] = 0xED;
				buffer1[2] = 0x08;		
			}
			else if(buffer[5]==14) //gamma14
			{
				buffer1[0] = 0x02;
				buffer1[1] = 0xfe;
				buffer1[2] = 0x74;	
				SSD2828_W_Array(SigMode,channel,buffer1,0);	//副屏Gamma 返工至gamma14
				buffer1[1] = 0xC2;
				buffer1[2] = 0x0C;	
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
				buffer1[1] = 0xC3;
				buffer1[2] = 0x0C;	
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
				buffer1[1] = 0xC5;
				buffer1[2] = 0x0C;	
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
				buffer1[1] = 0xFE;
				buffer1[2] = 0x40;
				SSD2828_W_Array(SigMode,channel,buffer1,0);     //Page0
				delay_ms(50);
				buffer1[1] = 0xEC;  //74 OTP two Times
				buffer1[2] = 0x10;
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
				buffer1[1] = 0xED;
				buffer1[2] = 0x08;		
			}
			SSD2828_W_Array(SigMode,channel,buffer1,0);	
		}
		
		else if(buffer[4]==5)//P-40H,P-60H,P-70H,P-90H,A0,D0,D2,72H,74H ,10h ,(80h),e0,e2,F2
		{
			buffer1[0] = 0x02;			
			if(buffer[3]==1) //time1
			{
				buffer1[1] = 0xED;  //82
				buffer1[2] = 0x40;
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
				buffer1[1] = 0xF6;
				buffer1[2] = 0xFF;
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
				buffer1[1] = 0xF8;  //72 
				buffer1[2] = 0x20;
				SSD2828_W_Array(SigMode,channel,buffer1,0);					
				buffer1[1] = 0xEC;  //74
				buffer1[2] = 0x08;
				SSD2828_W_Array(SigMode,channel,buffer1,0);								
				buffer1[1] = 0xF0;  //F2
				buffer1[2] = 0x04;
				SSD2828_W_Array(SigMode,channel,buffer1,0);								
				buffer1[1] = 0xFE;
				buffer1[2] = 0xD0;
				SSD2828_W_Array(SigMode,channel,buffer1,0); 
				buffer1[1] = 0xE5;
				buffer1[2] = 0x23; //0+1+5
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
			}
			else if(buffer[3]==2) //TIME2
			{
				buffer1[1] = 0xED;  //82
				buffer1[2] = 0x80;
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
				buffer1[1] = 0xF7;
				buffer1[2] = 0xFF;
				SSD2828_W_Array(SigMode,channel,buffer1,0);						
				buffer1[1] = 0xF9;  //72
				buffer1[2] = 0x20;
				SSD2828_W_Array(SigMode,channel,buffer1,0);					
				buffer1[1] = 0xEC;  //74
				buffer1[2] = 0x10;
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
				buffer1[1] = 0xF0;  //F2
				buffer1[2] = 0x08;
				SSD2828_W_Array(SigMode,channel,buffer1,0);		
				buffer1[1] = 0xFE;
				buffer1[2] = 0xD0;
				SSD2828_W_Array(SigMode,channel,buffer1,0); 
				buffer1[1] = 0xE4;
				buffer1[2] = 0x03;
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
			}
		}
		else if(buffer[4]==6)//20\22\26
		{
			if(buffer[3]==1)
			{	
				buffer1[1] = 0xF8;
				buffer1[2] = 0x16;
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
			}
			else if(buffer[3]==2)
			{
				buffer1[1] = 0xF9;
				buffer1[2] = 0x16;
				SSD2828_W_Array(SigMode,channel,buffer1,0);	
			}
		}
		else if(buffer[4]==7)//RCN
		{
			if(buffer[3]==1)
			{				
				buffer1[1] = 0xFE;
				buffer1[2] = 0x40;
				SSD2828_W_Array(SigMode,channel,buffer1,0);				
				buffer1[1] = 0xF8;
				buffer1[2] = 0x40;
				SSD2828_W_Array(SigMode,channel,buffer1,0);
			}
			else if(buffer[3]==2)
			{
				buffer1[1] = 0xFE;
				buffer1[2] = 0x40;
				SSD2828_W_Array(SigMode,channel,buffer1,0);				
				buffer1[1] = 0xF8;
				buffer1[2] = 0x80;
				SSD2828_W_Array(SigMode,channel,buffer1,0);			
			}
		}
//--------------------
		buffer1[0] = 0x02;
    buffer1[1] = 0xFE;
    buffer1[2] = 0x40;
    SSD2828_W_Array(SigMode,channel,buffer1,0);     //Page0
    delay_ms(50);
    buffer1[0] = 0x02;//MTPCTR
    buffer1[1] = 0xF2;
    buffer1[2] = 0x01;
    SSD2828_W_Array(SigMode,channel,buffer1,0);   
		delay_ms(100); 
    buffer1[0] = 0x02;
    buffer1[1] = 0xF3;
    buffer1[2] = 0xA5;
    SSD2828_W_Array(SigMode,channel,buffer1,0);  
    buffer1[0] = 0x02;
    buffer1[1] = 0xF4;
    buffer1[2] = 0x5A;
    SSD2828_W_Array(SigMode,channel,buffer1,0);  
    buffer1[0] = 0x02;
    buffer1[1] = 0xF5;
    buffer1[2] = 0x3C;
    SSD2828_W_Array(SigMode,channel,buffer1,0);  		
    delay_ms(1500);         // wait for >400 ms   
    buffer[4] = Uart_Error_None;
    buffer[1] = 0x07;
	  buffer[2] = 0x03;	
    buffer[0] = 0x4F;		
    STM2PC(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 写OTP状态  ：ok		
		
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);		
}
//----20190713----
//---------------------------------------------------------------------------------------------------------------
void RM692C9_Read_MTP_Time(USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
	u8 buffer1[3];	

	u8 Addr[]={0xB4,0xB3,0xB2,0xB7,0xB6,0xB5};
	
	SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0410)&0XFFFD);		
		delay_ms(5);
		SSD2828_W_Reg(SigMode,channel,0xC1,0x0002);    
			buffer1[0] = 0x02;
			buffer1[1] = 0xfe;
			buffer1[2] = 0x44;
			SSD2828_W_Array(SigMode,channel,buffer1,0); 
			delay_ms(20);		
	  for(i=0;i<6;i++)
		{
			SSD2828_W_Reg(SigMode,channel,0xB7,((HS_B7_Data|0x0010)&0XFFFD)|0x0080);  //bit7 1:??? bit4 1:HS CLOCK Disable
			delay_ms(5);					
			SSD2828_W_Reg(SigMode,channel,0xC1,0x0002);                                
			buffer1[0] = 0x01;
			buffer1[1] = Addr[i];
			SSD2828_W_Array(SigMode,channel,buffer1,0); 
			delay_ms(20);
			buffer[4+i]=SSD2828_R_Reg(SigMode,channel,0xFF);
		}
		SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
    delay_ms(5);
		
    STM2PC(pdev,CDC_IN_EP,buffer,buffer[2]+3);
}

//---20190713-----RM692CX_Read_All_MTP_Reg
void RM692C9_Read_All_MTP_Reg(USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
	u8 SendBuff[3];	
	u8 Addr[21]={0xe7,0xe6,0xAE ,0xAF ,0xB0 ,0xB1 ,0xB4 ,0xB3 ,0xB2 ,0xA9 ,0xAA,0xAB,0xBA,0xBB,0xAD ,0xAC ,0xB7 ,0xB6,0xB5,0xB9 ,0xB8};
	//---READ 0xD0	
	SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0410)&0XFFFD);		
	delay_ms(5);
	
	SSD2828_W_Reg(SigMode,channel,0xC1,0x0002);    
	SendBuff[0] = 0x02;
	SendBuff[1] = 0xfe;
	SendBuff[2] = 0xD0;
	SSD2828_W_Array(SigMode,channel,SendBuff,0); 
	delay_ms(20);		
	for(i=0;i<2;i++)
	{
		SSD2828_W_Reg(SigMode,channel,0xB7,((HS_B7_Data|0x0010)&0XFFFD)|0x0080);  //bit7 1:??? bit4 1:HS CLOCK Disable
		delay_ms(5);					
		SSD2828_W_Reg(SigMode,channel,0xC1,0x0002);                                
		SendBuff[0] = 0x01;
		SendBuff[1] = Addr[i];
		SSD2828_W_Array(SigMode,channel,SendBuff,0); 
		delay_ms(20);
		buffer[4+i]=SSD2828_R_Reg(SigMode,channel,0xFF);
	}
	//---READ 0x44
	SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0410)&0XFFFD);		
	delay_ms(5);
	
	SSD2828_W_Reg(SigMode,channel,0xC1,0x0002);    
	SendBuff[0] = 0x02;
	SendBuff[1] = 0xfe;
	SendBuff[2] = 0x44;
	SSD2828_W_Array(SigMode,channel,SendBuff,0); 
	delay_ms(20);		
	for(i=2;i<21;i++)
	{
		SSD2828_W_Reg(SigMode,channel,0xB7,((HS_B7_Data|0x0010)&0XFFFD)|0x0080);  //bit7 1:??? bit4 1:HS CLOCK Disable
		delay_ms(5);					
		SSD2828_W_Reg(SigMode,channel,0xC1,0x0002);                                
		SendBuff[0] = 0x01;
		SendBuff[1] = Addr[i];
		SSD2828_W_Array(SigMode,channel,SendBuff,0); 
		delay_ms(20);
		buffer[4+i]=SSD2828_R_Reg(SigMode,channel,0xFF);
	}
	
	SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
    delay_ms(5);
		
    STM2PC(pdev,CDC_IN_EP,buffer,buffer[2]+3);
}
//-----------------------------------------------------------------------------

void ProcessForIc4F( USBD_HandleTypeDef *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8 buffer[],u16 LP_B7_Data,u16 HS_B7_Data)
{	
	//void *pdev;
	switch(buffer[1])
	{
		case 0x01:                                      //写寄存器
				RM692Cx_Write_Register(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
				break;
		case 0x02:                                      //读寄存器
				RM692Cx_Read_Register(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
				break;
		case 0x03:                                      //写Gamma
				RM692Cx_Write_Gamma(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
				break;
		case 0x04:                                      //写Gamma
				RM692Cx_Read_Gamma(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
				break;				
		case 0x07:                                      //读Gamma
				RM692Cx_Gamma_OTP_Start(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data); 
				break;
		case 0x06: 
				RM692Cx_Gamma_Mapping(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);	
				break;
		case 0x0B:
				RM692C9_Read_MTP_Time(pdev,ep_addr,SigMode ,channel,buffer,LP_B7_Data,HS_B7_Data);
				break;
        case 0x1B:
				RM692C9_Read_All_MTP_Reg(pdev,ep_addr,SigMode ,channel,buffer,LP_B7_Data,HS_B7_Data);
				break;
		case 0xDD:   									// auto Gamma数据
			  RM692CX_AutoGamma(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data); 
		break;		
		case 0xDC: 
				RM692CX_AutoGamma_UDC(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
		break;			
		default:break;
	}			
}




